// Додаємо один обробник на батьківський елемент
list.addEventListener('click', function(event) { // Перевіряємо, чи клік був на елементі li if (event.target.tagName === 'LI') { console.log('Клік на елементі:', event.target.textContent);
}
});
Приклад 2: Зупинка поширення події
Іноді потрібно зупинити подію, щоб вона не поширювалася далі:
// Зупиняємо спливання події
event.stopPropagation();
// Або зупиняємо і спливання, і виконання інших обробників на цьому елементі // event.stopImmediatePropagation();
});
// Цей обробник не виконається через stopPropagation() document.getElementById('parent').addEventListener('click', function() { console.log('Цей обробник не виконається');
});
Приклад 3: Використання фаз для спеціальних сценаріїв
Фаза занурення корисна, коли потрібно перехопити подію до того, як вона дійде до цільового елемента:
// Заборона кліків на всіх елементах, крім дозволених document.addEventListener('click', function(event) { // Якщо елемент не має класу 'allowed-click' if (!event.target.classList.contains('allowed-click')) {
event.stopPropagation();
event.preventDefault(); console.log('Клік заблоковано!');
}
}, true); // Використовуємо фазу занурення
Короткий підсумок
Фаза занурення (capturing): Подія йде зверху вниз. Використовуйте addEventListener(event, handler, true)
Фаза мети (target): Подія досягає цільового елемента. Обробники виконуються незалежно від налаштувань capture
Фаза спливання (bubbling): Подія йде знизу вгору. Це фаза за замовчуванням: addEventListener(event, handler, false)
stopPropagation(): Зупиняє поширення події, але дозволяє виконати інші обробники на поточному елементі
stopImmediatePropagation(): Зупиняє поширення події і виконання інших обробників на поточному елементі